import Axios from "../lib/axios.js";

// 通过axios的create方法创建新的请求对象
const api = Axios.create({
  // 会自动将请求时的url拼接在baseURL后
  baseURL: "http://localhost:9000",
  //   设置超时时间
  timeout: 10000,
});

api.interceptors.request.use((config) => {
  // 从localStorage中获取token
  const token = localStorage.getItem("token");

  // 如果token存在，则设置Authorization头
  if (token) {
    // 让每个请求都带上自定义的token
    config.headers.Authorization = token;
  }

  // 返回配置信息
  return config;
});
// 添加响应拦截器，用于在接收到响应后处理响应数据
api.interceptors.response.use(
  function (response) {
     // 如果响应数据的code为401，表示登录认证过期
    if (response.data.code === 401) {
      // 清除localStorage中的token
      localStorage.clear();
      // 提示用户登录认证过期，请重新登录
      alert("登陆认证过期，请重新登录");
      // 跳转到登录页面
      window.location.href = "index.html";
    } else {
      // 如果code不为401，直接返回响应数据
      return response;
    }
  },
  function (error) {
    // 如果请求出错，且有响应数据
    if (error.response) {
      // 提示用户请求出错，请刷新页面重试
      alert("请求出错，请刷新页面重试");
    }
    // 返回一个被拒绝的Promise对象
    return Promise.reject(error);
  }
);
// 导出get和post方法，用于发起GET和POST请求
export const get = (url, params) => api.get(url, { params });
export const post = (url, params) => api.post(url, stringify(params));
// 将对象转换为查询字符串的方法
const stringify = (obj) =>
  Object.keys(obj)
    .map((k) => k + "=" + obj[k])
    .join("&");
